package model.bean;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import util.Constants;

@Entity
@Table(name = Constants.DATABASE_TABLE_CHAMADO, schema = Constants.DATABASE_NOME)
public class Chamado implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer idChamado;

	@Column(name = "descricao", insertable = true, updatable = true, length=2000)
	private String descricao;

	@Column(name = "tipoChamado", insertable = true, updatable = true, length = 50)
	private String tipoChamado;
	
	@Column(name = "curso", insertable = true, updatable = true, length = 50)
	private String curso;
	
	@Column(name = "disciplina", insertable = true, updatable = true, length = 50)
	private String disciplina;
	
	@Column(name = "turma", insertable = true, updatable = true, length = 50)
	private String turma;	
	
	@Column(name = "situacao", insertable = true, updatable = true, length = 20)
	private String situacao;
	
    @Column(name = "tempoConclusao", nullable = true, updatable = true, insertable = true)
    @Temporal(javax.persistence.TemporalType.DATE)	
	private Date tempoConclusao;
	
    @Column(name = "dataAbertura", nullable = false, updatable = true, insertable = true)
    @Temporal(javax.persistence.TemporalType.DATE)
	private Date dataAbertura;
	
    @Column(name = "dataFechamento", nullable = true, updatable = true, insertable = true)
    @Temporal(javax.persistence.TemporalType.DATE)
	private Date dataFechamento;
	
	@ManyToOne
	@Fetch(FetchMode.JOIN)
	@JoinColumn(referencedColumnName = "idNucleo")
	private Nucleo nucleo;
	
	@ManyToOne
	@Fetch(FetchMode.JOIN)
	@JoinColumn(referencedColumnName = "idMovimentacao")
	private Movimentacao movimentacao;
	
	@ManyToOne
	@Fetch(FetchMode.JOIN)
	@JoinColumn(referencedColumnName = "idUsuario")
	private Usuario usuario;	
	
	public Chamado() {
		// TODO Auto-generated constructor stub
	}

	public Integer getIdChamado() {
		return idChamado;
	}
	
	public String getCurso() {
		return curso;
	}
	
	public String getDisciplina() {
		return disciplina;
	}
	
	public String getTurma() {
		return turma;
	}
	
	public void setCurso(String curso) {
		this.curso = curso;
	}
	
	public void setDisciplina(String disciplina) {
		this.disciplina = disciplina;
	}
	
	public void setTurma(String turma) {
		this.turma = turma;
	}

	public void setIdChamado(Integer idChamado) {
		this.idChamado = idChamado;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getTipoChamado() {
		return tipoChamado;
	}

	public void setTipoChamado(String tipoChamado) {
		this.tipoChamado = tipoChamado;
	}

	public String getSituacao() {
		return situacao;
	}

	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	public Date getTempoConclusao() {
		return tempoConclusao;
	}

	public void setTempoConclusao(Date tempoConclusao) {
		this.tempoConclusao = tempoConclusao;
	}

	public Date getDataAbertura() {
		return dataAbertura;
	}

	public void setDataAbertura(Date dataAbertura) {
		this.dataAbertura = dataAbertura;
	}

	public Date getDataFechamento() {
		return dataFechamento;
	}

	public void setDataFechamento(Date dataFechamento) {
		this.dataFechamento = dataFechamento;
	}

	public Nucleo getNucleo() {
		return nucleo;
	}

	public void setNucleo(Nucleo nucleo) {
		this.nucleo = nucleo;
	}

	public Movimentacao getMovimentacao() {
		return movimentacao;
	}

	public void setMovimentacao(Movimentacao movimentacao) {
		this.movimentacao = movimentacao;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	

	
}
